<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <div>
      <input type="text" />
    </div>
    <script>
      function debounce(callback, delay) {
        let timer = null
        console.log("timer")
        // 最终绑定的是这个函数，那么在这个函数里做什么事情呢？
        // 做的事情是处理callback,而这个处理逻辑就是防抖的核心了
        const _debounce = function () {
          // delay时间内如果有再次触发事件，将上一个定时器取消掉
          if (timer) clearTimeout(timer)
          timer = setTimeout(() => {
            callback()
            timer = null
          }, delay)
        }
        return _debounce
      }
    </script>

    <!-- 验证防抖函数 -->
    <script>
      const input1 = document.querySelector("input")
      let counter = 1
      input1.oninput = debounce(function () {
        //debounce 方法的执行时机是绑定事件监听器的时候
        console.log(`发送网络请求${counter++}`, this.value)
      }, 2000)
      console.log("df", input1.oninput)
    </script>
  </body>
</html>
